package com.fdh.myjdbcutil;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * 解析ResultSet接口
 *
 * @author fdh
 * @version 1.0
 */
public interface IAnalysisResultSet {
    ResultSet getResultSet();

    /**
     * 解析ResultSet，返回ArrayList
     *
     * @param colNames 需要解析的列名
     * @return 结果集ArrayList
     */
    ArrayList<Object[]> analyseResultSet(String[] colNames);

    //#region 非封装类

    /**
     * 解析ResultSet，返回实体类
     *
     * @param colNames 需要解析的列名
     * @param target   实体类
     * @param <T>      实体类类型
     * @return 注入好的实体类
     */
    <T extends IMyEntity> T analyseResultSet(String[] colNames, T target);

    /**
     * 解析ResultSet，返回实体类
     *
     * @param colNames    需要解析的列名
     * @param targetClass 实体类class
     * @param <T>         实体类类型
     * @return 注入好的实体类
     */

    <T extends IMyEntity> T analyseResultSet(String[] colNames, Class<T> targetClass);

    /**
     * 解析ResultSet，返回实体类列表
     *
     * @param colNames    需要解析的列名
     * @param targetClass 实体类class
     * @param <T>         实体类类型
     * @return 注入好的实体类List
     */
    <T extends IMyEntity> List<T> analyseResultSetReturnList(String[] colNames, Class<T> targetClass);

    //#endregion

    //#region 封装类

    /**
     * 解析ResultSet，返回实体类
     *
     * <p>支持封装类</p>
     *
     * @param colNames 需要解析的列名
     * @param target   实体类
     * @param <T>      实体类类型
     * @return 注入好的实体类
     */
    <T extends IMyEntity> T analyseResultSet_upgrade(String[] colNames, T target);

    /**
     * 解析ResultSet，返回实体类
     *
     * <p>支持封装类</p>
     *
     * @param colNames    需要解析的列名
     * @param targetClass 实体类class
     * @param <T>         实体类类型
     * @return 注入好的实体类
     */
    <T extends IMyEntity> T analyseResultSet_upgrade(String[] colNames, Class<T> targetClass);

    /**
     * 解析ResultSet，返回实体类列表
     *
     * <p>支持封装类</p>
     *
     * @param colNames 需要解析的列名
     * @param target   实体类
     * @param <T>      实体类类型
     * @return 注入好的实体类List
     */
    <T extends IMyEntity> List<T> analyseResultSetReturnList_upgrade(String[] colNames, Class<T> target);
    //#endregion
}
